% !Mode:: "TeX:UTF-8"

\chapter{软件需求规格说明书}

\section{引言}

\subsection{编写目的}
本文编写的目的是提供一个开发App的用户需求目标，并对所实现的App业
务功能做全面的需求描述，作为系统设计和实现的目标及验收依据，也作为系统
测试和编写用户手册的依据。

\subsection{预期读者}
本《软件需求规格说明书》的预期读者是：
\begin{itemize}
  \item{项目组所有人员}
  \item {测试组人员}
  \item {SQA 人员}
  \item {项目授权调阅本文档的其他人员}
\end{itemize}


\section{项目概述}

\subsection{项目背景与目标}
近年来，外卖行业的市场规模持续扩大，增速明显。一方面，随着城市化进程的加快，人们的生活节奏越来越快，外卖成为了解决日常饮食需求的重要途径；另一方面，互联网技术的普及使得外卖服务更加便捷，极大地推动了外卖市场的发展。
越来越多的不同城市的不同人群更加习惯使用外卖服务解决自己的需求，外卖已经成为一种新的生活方式。

本项目旨在为中国广泛地区的用户提供丰富多样、简单快捷的在线订餐服务；为不同类型的餐饮商户提供基于互联网技术的一体化运营解决方案。
本项目将在现有工程的基础之上完成业务，最终推出一款“饿了么”外卖平台App，满足用户在手机端使用产品时的基本功能主要包括用户在线订购外卖、商家入驻、配送服务等。
\subsection{需求概述}
本项目参照 “饿了么官网网页版”制作,专注于完成点餐业务线功能，“饿了么官网”中的其它功能暂不涉及。以下内容大致概括了本系统的项目需求：
\begin{enumerate}
\item{用户信息管理}：在用户进入系统前要求客户进行登录，未注册的用户需要注册后方可登录。登录时需要对用户Id和密码进行校验。

\item{商家信息管理}：向用户提供商家名称、地址、图片以及食物等相关信息。

\item{购物车及订单管理}：允许用户向购物车中添加或删除食物，并生成相关订单。

\item{用户地址管理}：一个用户可拥有多个收货地址并对地址进行修改。
\end{enumerate}

\subsection{项目结构}
项目的结构如图~\ref{fig:jiegou}~所示。
\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.7\textwidth]{jiegou}
  \caption{项目结构图}\label{fig:jiegou}
  \vspace{\baselineskip}
  \end{figure}
  
\section{系统功能需求}

\subsection{功能总览}
项目的系统功能总览如下表~\ref{tab:gn}~所示。
\begin{table}[htbp]
  \caption{饿了么App功能总览}\label{tab:gn}
  \vspace{0.5em}\wuhao
  \begin{tabularx}{\textwidth}{XXXX}
  \toprule[1.5pt]
  功能   & 具体描述  & 适用系统角色  \\
  \midrule[1pt]
  用户信息管理& 在用户进入系统前要求客户进行登录（或注册），登录时需要进行校验。& 商家，顾客\\
  商家信息管理 & 向用户提供商家名称、地址、图片及食物等信息。 & 商家\\
  购物车及订单管理 & 允许用户向购物车中增添食物，并生成订单，实现购物车展开的功能。& 顾客\\
  用户地址管理& 一个用户可拥有多个收货地址并对地址进行修改。 & 顾客\\
  \bottomrule[1.5pt]
  \end{tabularx}
  \vspace{\baselineskip}
\end{table}

\subsection{数据流程图}

该项目是基于“饿了么网页版”开发的在线点单App，商家端通过App进行商家注册、商品设置、订单配送等；
顾客端通过App进行用户注册、登录、点餐、提交订单等。
项目的数据流程图如图~\ref{fig:liucheng}~所示。
\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.8\textwidth]{liucheng}
  \caption{数据流程图}\label{fig:liucheng}
  \vspace{\baselineskip}
  \end{figure}
  
  \subsection{数据流分析}

  顾客登录App后选择商家、选择商品，确认订单和地址后进行支付；
  商家登录App后对自家商品进行增添删改，并处理订单。
  项目的数据流分析如图~\ref{fig:shujuliu}~所示。
  \begin{figure}[htbp]
    \centering
    \includegraphics[width=0.9\textwidth]{shujuliu}
    \caption{数据流程图}\label{fig:shujuliu}
    \vspace{\baselineskip}
    \end{figure}
    
    \subsection{ER图}

    项目数据的ER图如图~\ref{fig:er}~所示。
    \begin{figure}[htbp]
      \centering
      \includegraphics[width=\textwidth]{ER}
      \caption{数据流程图}\label{fig:er}
      \vspace{\baselineskip}
      \end{figure}

\section{软硬件及外部系统接口需求}

\subsection{用户界面}
\begin{enumerate}
  \item 为各个页面完善返回键功能，排除无法返回上一步的故障。
  \item 目前存在小数点后显示很长，不美观的问题，解决订单页面小数点显示的问题。
  \item 调整页面设置格式，解决手机网页端对不同机型的比例适配问题。
  \item 完善界面美观性，处理首页最下方信息被遮挡的问题，将页面设计得更简洁美观，富有软件特色。
\end{enumerate}

\subsection{硬件需求}
\begin{enumerate}
  \item 完善代码整体结构，重新设计前后端接口，使其符合RESTful风格。
  \item 贴近实际，考虑现实生活中的网络拥堵问题，避免用户在支付时发生网络拥堵导致反复调用接口，解决网络异常情况下调用接口重复扣款的问题。
  \item 增加商品数目限制，同时添加对对订单和购物⻋是否为空的验证。
\end{enumerate}

\section{安全性需求}
\begin{enumerate}
  \item 改变接口对参数的传输方式，对用户注册存入的密码进行加密处理，封装前端返回的信息，确保用户数据安全。
  \item 增加后端对前端提交的数据的检验功能，防止伪造的前端提交而已数据，修改其他用户的地址、订单等信息，提高系统安全性。
  \item 对用户注册时存入的密码进行加密处理后，再存入数据库。
\end{enumerate}

\section{系统功能模块详细说明}

\subsection{用户登入}
功能描述：

用户登入主要是用户的注册和登录。用户点击个人主页按钮即可跳转到登陆界面，输入账号密码进行登录；
在登录界面点击“去注册”跳转到注册页面，根据页面提示完成用户注册后即可跳转到登陆界面进行登录。
在此处增加验证功能，如果账号密码不匹配则无法登录。


页面原型展示:
\begin{figure}[htbp]
  \centering
  \begin{minipage}{0.4\textwidth}
  \centering
  \includegraphics[width=\textwidth]{zhuce}
  \caption{用户注册界面}\label{fig:zhuce}
  \end{minipage}
  \begin{minipage}{0.4\textwidth}
  \centering
  \includegraphics[width=\textwidth]{denglu}
  \caption{用户登录界面}\label{fig:denglu}
  \end{minipage}
  \vspace{\baselineskip}
  \end{figure}

\subsection{商家信息}
功能描述：

商家信息主要是显示商家的名称、地址、图片及食物等信息。点击商家分类按钮，可以查看不同分类下的商家；
点击具体商家，可以展示商家的图片、地址、食物等。具体信息包括事物的预览图、价格和起送费等，页面还有购物车标志，与下一项功能有关。

页面原型展示:

\begin{figure}[htbp]
  \centering
  \begin{minipage}{0.3\textwidth}
  \centering
  \includegraphics[width=\textwidth]{liebiao}
  \caption{商家列表信息}\label{fig:liebiao}
  \end{minipage}
  \begin{minipage}{0.3\textwidth}
  \centering
  \includegraphics[width=\textwidth]{shangjiazhuye}
  \caption{商家详细信息}\label{fig:shangjiazhuye}
  \end{minipage}
  \vspace{\baselineskip}
  \end{figure}

\subsection{订单管理}
功能描述：

订单管理主要是显示购物车、订单、支付等信息。点击商品右侧加号，可以添加购物车；点击“去结算”按钮，即跳转到支付页面；
在支付页面选择支付方式，即可完成支付。

页面原型展示:

\begin{figure}[htbp]
  \centering
  \begin{minipage}{0.3\textwidth}
  \centering
  \includegraphics[width=\textwidth]{dingcan}
  \caption{用户订单信息}\label{fig:dingcan}
  \end{minipage}
  \begin{minipage}{0.3\textwidth}
  \centering
  \includegraphics[width=\textwidth]{jiezhang}
  \caption{用户支付信息}\label{fig:jiezhang}
  \end{minipage}
  \vspace{\baselineskip}
  \end{figure}